package com.itheima.Interceptor;

import com.alibaba.fastjson.JSONObject;
import com.itheima.pojo.Result;
import com.itheima.utils.JwtUtils;
import io.jsonwebtoken.Claims;
import lombok.val;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/*
* 登录认证
    1)编写LoginInterceptor复写preHandle
    2)编写逻辑
    4)Webconfig 中进行配置)把之前的所有的Filter 和 Interceptor 都注释
    5)重启测试
            1)删除湖览器保存的token,重新访问会自动跳转到 登录页
            2)登录重新测试
* */

//继承HandlIntercepter
public class LoginIntercepter  implements HandlerInterceptor {

    //现在就是只需要目标方法（preHandle）就可以了（将相当于Filter里面doFilter()方法）

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //Intercepter与filter之间的区别就是不需要filter的校验以及获取url直接去校验token
        //获取token
        String token =request.getHeader("token");
    //判断token是否为空
        if(token!=null&&token!=""){
            //如果不为空，就进行解析token
            try {
                Claims claims = JwtUtils.parseJWT(token);
                //如果解析成功，直接放行
                return true;
            } catch (Exception e) {

                //否者就直接抛出异常
                e.printStackTrace();
            }
        }
//现在就是如果token为空或则就是解析失败，按照文档要求就是直接返回json格式
         Result result1 =  Result.error("No-Login");
        //然后返回给前端的格式应该是这样
        response.getWriter().write(String.valueOf(result1));

        //但是现在就是将返回的数据作为json格式返回给前端
       String  json =  JSONObject.toJSONString(Result.error("No-Login")) ;
        //然后返回给前端的格式应该是这样
        response.getWriter().write(json);
        return false;

        //‘到这里逻辑部分写完了，现在就是其webconfig里面配置
    }
}
